﻿# -*- coding:utf-8 -*-
from django.db import models
from django.utils.html import format_html

from product.models import Product
from django_redis import get_redis_connection


# Create your models here.

# 流程接口
class Apitest(models.Model):
    # Product = models.ForeignKey('product.Product', on_delete=models.CASCADE, null=True)  # 关联产品id
    ApitestSuite = models.ForeignKey(verbose_name='suite id | 流程用例场景/接口名称', to='apitest.ApitestSuite', to_field='id',
                                     on_delete=models.CASCADE, null=True)  # 关联单一接口suite的id
    apitestname = models.CharField('流程用例场景/接口名称', max_length=64)  # 流程接口 测试场景
    apitestdesc = models.CharField('描述', max_length=64, null=True)  # 流程接口 描述
    apitester = models.CharField('测试负责人', max_length=16)  # 执行人
    apitestresult = models.BooleanField('测试结果（所有步骤是否全部通过）')  # 流程接口测试结果
    apidependent = models.BooleanField('接口间依赖')  # 流程接口入参作出参使用
    create_time = models.DateTimeField('创建时间', auto_now_add=True)  # 创建时间，永远是创建时的时间
    update_time = models.DateTimeField('更新时间', auto_now=True)  # 更新时间，自动获取当前时间

    class Meta:
        verbose_name = 'apitestname流程接口名称'
        verbose_name_plural = '流程场景接口'

    def __str__(self):
        # 获取redis的conn对象
        conn = get_redis_connection('default')
        # 删除key，apitest_apis_allinfo单一接口缓存数据
        conn.delete("redis_apitest_apis_allinfo")
        return str(self.ApitestSuite.id) + ' | ' + self.apitestname


# 流程接口步骤
class Apistep(models.Model):
    Apitest = models.ForeignKey('Apitest', on_delete=models.CASCADE, )  # 关联流程接口id
    apistep = models.CharField('测试步聚', max_length=100, null=True)  # 测试步聚
    apiname = models.CharField('接口名称', max_length=100)  # 接口名称描述
    apiurl = models.CharField('url地址', max_length=200)  # 地址
    REQUEST_METHOD = (('get', 'get'), ('post', 'post'), ('put', 'put'), ('delete', 'delete'), ('patch', 'patch'))
    cookie_or_token = models.CharField('cookie或token', blank=True, max_length=300, null=True)  # cookie或token
    apiparamvalue = models.CharField('请求参数和值', blank=True, max_length=800)  # 参数和值，数据库可以为空
    apimethod = models.CharField(verbose_name='请求方法', choices=REQUEST_METHOD, default='get', max_length=200,
                                 null=True)  # 请求方法
    apiresult = models.CharField('预期结果', max_length=5000)  # 预期结果
    apiresponse = models.CharField('响应数据', blank=True, max_length=5000, null=True)  # 响应数据
    apistatus = models.BooleanField('是否通过')  # 测试结果
    create_time = models.DateTimeField('创建时间', auto_now_add=True)  # 创建时间，永远是创建时的时间
    update_time = models.DateTimeField('更新时间', auto_now=True)  # 更新时间，自动获取当前时间

    def __str__(self):
        return self.apistep


# 流程接口suite
class ApitestSuite(models.Model):
    Product = models.ForeignKey(verbose_name='产品和产品描述', to='product.Product', to_field='id',
                                on_delete=models.CASCADE)  # 关联产品id
    apitest_caseName = models.CharField('流程用例/场景名称', max_length=200)  # 用例/场景名称
    apitest_tester = models.CharField('测试人', max_length=16)  # 测试人
    create_time = models.DateTimeField('创建时间', auto_now_add=True)  # 创建时间，永远是创建时的时间
    update_time = models.DateTimeField('更新时间', auto_now=True)  # 更新时间，自动获取当前时间

    class Meta:
        verbose_name = 'suite id | apitest_caseName用例场景名称'
        verbose_name_plural = '流程场景接口suite'

    def __str__(self):
        return str(self.id) + ' | ' + self.apitest_caseName


# 单一接口
class Apis(models.Model):
    # id = models.CharField('用例id', primary_key=True, max_length=11)  # 用例id
    ApisSuite = models.ForeignKey(verbose_name='suite id | 用例场景名称', to='apitest.ApisSuite', to_field='id',
                                  on_delete=models.CASCADE, null=True)  # 关联单一接口suite的id
    apiname = models.CharField('接口名称（用例名称）', max_length=100)  # 接口标题
    apiurl = models.CharField('url地址', max_length=200)  # 地址
    apiparamvalue = models.TextField('请求参数和值', blank=True, max_length=3000)  # 请求参数和值
    REQUEST_METHOD = (('get', 'get'), ('post', 'post'), ('put', 'put'), ('delete', 'delete'), ('patch', 'patch'))
    apimethod = models.CharField(verbose_name='请求方法', choices=REQUEST_METHOD, default='get', max_length=200,
                                 null=True)  # 请求方法
    cookie_or_token = models.TextField('cookie或token', blank=True, max_length=300, null=True)  # cookie或token
    apitester = models.CharField('测试负责人', max_length=16, null=True)  # 执行人
    apiresult = models.TextField('预期结果', max_length=5000)  # 预期结果
    apiresponse = models.TextField('响应数据', blank=True, max_length=5000, null=True)  # 响应数据
    apistatus = models.BooleanField('是否通过')  # 测试结果
    create_time = models.DateTimeField('创建时间', auto_now_add=True)  # 创建时间，永远是创建时的时间
    update_time = models.DateTimeField('更新时间', auto_now=True)  # 更新时间，自动获取当前时间

    class Meta:
        verbose_name = 'suite id | apiname用例名称/接口名称'
        verbose_name_plural = '单一场景接口'

    def __str__(self):
        # 获取redis的conn对象
        conn = get_redis_connection('default')
        # 删除key，apitest_apis_allinfo单一接口缓存数据
        conn.delete("redis_apitest_apis_allinfo")
        return str(self.ApisSuite.id) + ' | ' + self.apiname


# 单一接口suite
class ApisSuite(models.Model):
    Product = models.ForeignKey(verbose_name='产品和产品描述', to='product.Product', to_field='id',
                                on_delete=models.CASCADE)  # 关联产品id
    case_name = models.CharField('用例/场景名称', max_length=200)  # 用例/场景名称
    tester = models.CharField('测试人', max_length=16)  # 测试人
    create_time = models.DateTimeField('创建时间', auto_now_add=True)  # 创建时间，永远是创建时的时间
    update_time = models.DateTimeField('更新时间', auto_now=True)  # 更新时间，自动获取当前时间

    class Meta:
        verbose_name = 'suite id | case_name用例场景名称'
        verbose_name_plural = '单一场景接口suite'

    def __str__(self):
        return str(self.id) + ' | ' + self.case_name
